#!/bin/bash

# MCSM命令行管理菜单
# 作者: MCSM Pro Team
# 版本: 1.0.0

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

# 全局变量
BASE_PATH="/opt/mcsmanager"
CONFIG_FILE="${BASE_PATH}/daemon/data/Config/global.json"

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查服务状态
check_service_status() {
    local service=$1
    if systemctl is-active --quiet "$service"; then
        echo -e "${GREEN}运行中${NC}"
    else
        echo -e "${RED}已停止${NC}"
    fi
}

# 显示主菜单
show_main_menu() {
    clear
    echo ""
    echo "=========================================="
    echo -e "${CYAN}        MCSM 管理菜单${NC}"
    echo "=========================================="
    echo ""
    echo -e "${BLUE}服务状态:${NC}"
    echo -n "  面板服务: "
    check_service_status "mcsm-web"
    echo -n "  节点服务: "
    check_service_status "mcsm-daemon"
    echo ""
    echo -e "${BLUE}管理选项:${NC}"
    echo "  1. 查看远程密钥"
    echo "  2. 启动面板"
    echo "  3. 停止面板"
    echo "  4. 重启面板"
    echo "  5. 启动节点"
    echo "  6. 停止节点"
    echo "  7. 重启节点"
    echo "  8. 查看面板日志"
    echo "  9. 查看节点日志"
    echo "  10. 查看系统信息"
    echo "  0. 退出"
    echo ""
    echo "=========================================="
}

# 查看远程密钥
show_remote_key() {
    echo ""
    echo -e "${BLUE}正在获取远程密钥...${NC}"
    
    if [ ! -f "$CONFIG_FILE" ]; then
        log_error "配置文件不存在: $CONFIG_FILE"
        log_warn "请确保MCSM已正确安装并至少启动过一次"
        return 1
    fi
    
    local daemon_key
    # 使用更灵活的正则表达式来匹配JSON中的key字段
    daemon_key=$(cat "$CONFIG_FILE" | grep -o '"key"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*"key"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
    
    if [ -n "$daemon_key" ]; then
        echo ""
        echo "=========================================="
        echo -e "${GREEN}远程节点密钥:${NC}"
        echo -e "${YELLOW}$daemon_key${NC}"
        echo "=========================================="
        echo ""
        echo -e "${BLUE}使用说明:${NC}"
        echo "1. 在面板中添加远程节点时使用此密钥"
        echo "2. 节点地址: 您的服务器IP:24444"
        echo "3. 请妥善保管此密钥"
    else
        log_error "无法获取远程密钥"
        log_warn "请检查节点服务是否正常运行"
        return 1
    fi
}

# 启动面板
start_web() {
    echo ""
    log_info "正在启动面板服务..."
    
    if systemctl start mcsm-web; then
        sleep 2
        if systemctl is-active --quiet mcsm-web; then
            log_info "面板服务启动成功"
        else
            log_error "面板服务启动失败"
            echo "请查看日志: journalctl -u mcsm-web -n 20"
        fi
    else
        log_error "面板服务启动失败"
    fi
}

# 停止面板
stop_web() {
    echo ""
    log_info "正在停止面板服务..."
    
    if systemctl stop mcsm-web; then
        log_info "面板服务已停止"
    else
        log_error "面板服务停止失败"
    fi
}

# 重启面板
restart_web() {
    echo ""
    log_info "正在重启面板服务..."
    
    if systemctl restart mcsm-web; then
        sleep 2
        if systemctl is-active --quiet mcsm-web; then
            log_info "面板服务重启成功"
        else
            log_error "面板服务重启失败"
            echo "请查看日志: journalctl -u mcsm-web -n 20"
        fi
    else
        log_error "面板服务重启失败"
    fi
}

# 启动节点
start_daemon() {
    echo ""
    log_info "正在启动节点服务..."
    
    if systemctl start mcsm-daemon; then
        sleep 2
        if systemctl is-active --quiet mcsm-daemon; then
            log_info "节点服务启动成功"
        else
            log_error "节点服务启动失败"
            echo "请查看日志: journalctl -u mcsm-daemon -n 20"
        fi
    else
        log_error "节点服务启动失败"
    fi
}

# 停止节点
stop_daemon() {
    echo ""
    log_info "正在停止节点服务..."
    
    if systemctl stop mcsm-daemon; then
        log_info "节点服务已停止"
    else
        log_error "节点服务停止失败"
    fi
}

# 重启节点
restart_daemon() {
    echo ""
    log_info "正在重启节点服务..."
    
    if systemctl restart mcsm-daemon; then
        sleep 2
        if systemctl is-active --quiet mcsm-daemon; then
            log_info "节点服务重启成功"
        else
            log_error "节点服务重启失败"
            echo "请查看日志: journalctl -u mcsm-daemon -n 20"
        fi
    else
        log_error "节点服务重启失败"
    fi
}

# 查看面板日志
show_web_logs() {
    echo ""
    echo -e "${BLUE}面板服务日志 (按Ctrl+C退出):${NC}"
    echo ""
    journalctl -u mcsm-web -f --no-pager
}

# 查看节点日志
show_daemon_logs() {
    echo ""
    echo -e "${BLUE}节点服务日志 (按Ctrl+C退出):${NC}"
    echo ""
    journalctl -u mcsm-daemon -f --no-pager
}

# 查看系统信息
show_system_info() {
    echo ""
    echo "=========================================="
    echo -e "${CYAN}        系统信息${NC}"
    echo "=========================================="
    echo ""
    
    # 系统基本信息
    echo -e "${BLUE}系统信息:${NC}"
    echo "  操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
    echo "  内核版本: $(uname -r)"
    echo "  架构: $(uname -m)"
    echo ""
    
    # CPU和内存信息
    echo -e "${BLUE}硬件信息:${NC}"
    echo "  CPU核心: $(nproc) 核"
    echo "  内存使用: $(free -h | awk 'NR==2{printf "%.1f/%.1f GB (%.1f%%)", $3/1024/1024, $2/1024/1024, $3*100/$2}')"
    echo "  磁盘使用: $(df -h / | awk 'NR==2{printf "%s/%s (%s)", $3, $2, $5}')"
    echo ""
    
    # Node.js信息
    echo -e "${BLUE}运行环境:${NC}"
    if command -v node >/dev/null 2>&1; then
        echo "  Node.js版本: $(node --version)"
    else
        echo "  Node.js: 未安装"
    fi
    
    if command -v npm >/dev/null 2>&1; then
        echo "  NPM版本: $(npm --version)"
    else
        echo "  NPM: 未安装"
    fi
    echo ""
    
    # MCSM信息
    echo -e "${BLUE}MCSM信息:${NC}"
    echo "  安装路径: $BASE_PATH"
    if [ -d "$BASE_PATH" ]; then
        echo "  安装状态: 已安装"
    else
        echo "  安装状态: 未安装"
    fi
    
    # 端口信息
    echo ""
    echo -e "${BLUE}端口状态:${NC}"
    if ss -tlnp | grep -q ":23333"; then
        echo "  面板端口 (23333): 已监听"
    else
        echo "  面板端口 (23333): 未监听"
    fi
    
    if ss -tlnp | grep -q ":24444"; then
        echo "  节点端口 (24444): 已监听"
    else
        echo "  节点端口 (24444): 未监听"
    fi
    
    echo ""
    echo "=========================================="
}

# 等待用户按键
wait_for_key() {
    echo ""
    read -p "按回车键继续..." -r
}

# 主循环
main_loop() {
    while true; do
        show_main_menu
        
        read -p "请选择操作 [0-10]: " choice
        
        case $choice in
            1)
                show_remote_key
                wait_for_key
                ;;
            2)
                start_web
                wait_for_key
                ;;
            3)
                stop_web
                wait_for_key
                ;;
            4)
                restart_web
                wait_for_key
                ;;
            5)
                start_daemon
                wait_for_key
                ;;
            6)
                stop_daemon
                wait_for_key
                ;;
            7)
                restart_daemon
                wait_for_key
                ;;
            8)
                show_web_logs
                ;;
            9)
                show_daemon_logs
                ;;
            10)
                show_system_info
                wait_for_key
                ;;
            0)
                echo ""
                log_info "退出MCSM管理菜单"
                exit 0
                ;;
            *)
                echo ""
                log_error "无效的选择，请输入0-10之间的数字"
                wait_for_key
                ;;
        esac
    done
}

# 检查是否为root用户
check_root() {
    if [ "$EUID" -ne 0 ]; then
        log_error "请使用root权限运行此脚本"
        log_info "使用命令: sudo mcsm"
        exit 1
    fi
}

# 主函数
main() {
    # 检查root权限
    check_root
    
    # 检查MCSM是否安装
    if [ ! -d "$BASE_PATH" ]; then
        log_error "MCSM未安装或安装路径不正确"
        log_info "请先运行安装脚本: curl -fsSL https://gitee.com/wwwwwddzafv/mcsmpro/raw/master/mcsm-install-pro.sh | bash"
        exit 1
    fi
    
    # 启动主循环
    main_loop
}

# 执行主函数
main "$@"